﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace winformcode
{
    public class Encoder
    {
        //输出值放入putput里面
        public string inputdata { get; set; }
        //储存密钥
        public string key { get; set; }

        public string outputdata { get; set; }


        // 把输入的一个char类型转为int类型
        public int Convertcode(char x)
        {
            int num = x - 'a';
            return num;
        }
        // 把输入的int类型转为char类型
        public char convertnum(int num)
        {
            char ch = Convert.ToChar(num + 'a');
            return ch;
        }
        // 计算函数
        public string Compute()
        {
            // 创建一个数组，接受所有的字符转成的int类型
            List<int> listnum = new List<int>();
            for (int i = 0; i < inputdata.Length; i++)
            {
                char temp = inputdata[i];
                int tempnum = Convertcode(temp);
                listnum.Add(tempnum);
            }
            // 数组中每一个元素+key所对应的值，
            int j = 0;
            for (int i = 0; i < listnum.Count; i++)
            {
                // 确保小于密钥字符的个数
                if (j == key.Length)
                    j = 0;
                int tempnum = Convertcode(key[j]);
                listnum[i] += tempnum;
                j++;

            }
            //创建一个string类型数组接受所有的字符元素
            string listcode = "";
            // 将listnum中的数字转为char类型后输入listcode里
            foreach (var num in listnum)
            {
                int tempnum = num;
                // 避免输出字母非26个字母
                int more = num - 26;
                while (more >= 0)
                {
                    tempnum -= 26;
                    more -= 26;
                }
                char x = convertnum(tempnum);

                listcode += x;
            }
            return listcode;

        }
    }
}
